package main

import "fmt"

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

type ListNode struct {
	Val  int
	Next *ListNode
}

/*
当递归到结尾， node会返回最后一个节点
1-2-3-4
需要变成4-3-2-1

怎么做？没啥神奇的，把3放到4后面就行了，但是我们不能操作node 例如 node.Next=head

1-2-3-4 => 1-2-3-4-3 => 1-2-3, 4-3 按照这样就行了

3.Next.Next = 3
3.Next = nil
*/
func reverseList(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	node := reverseList(head.Next)
	head.Next.Next = head
	head.Next = nil
	return node
}

func main() {
	l1 := ListNode{Val: 1}
	l2 := ListNode{Val: 2}
	// l3 := ListNode{Val: 3}
	// l4 := ListNode{Val: 4}
	l1.Next = &l2
	// l2.Next = &l3
	// l3.Next = &l4
	n := reverseList(&l1)
	fmt.Println(n.Val)
	fmt.Println(n.Next.Val)
}
